home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 January - Disc 2 / Macworld (1999-01) (Disk 2).dmg / Serious Demos / Symbolic Composer 4.2 / Environment / System / CRESC / Variations / eval-section < prev    next >
Lisp/Scheme  |  1996-12-31  |  2KB  |  93 lines

  1. eval-section section-list symbol-affix how structure-pattern
  2.  
  3. With eval-section you can simulate the structuring protocol employed in the Class System.
  4.  
  5. Look at this short prelude modelled on Bach's C major prelude to see how it can operate.
  6.  
  7. ; prelude 1b
  8.  
  9. (setq a (activate-tonality (c maj 1 1 4))
  10.       b (activate-tonality (d min 1 1 4))
  11.       c (activate-tonality (a min 1 1 3))
  12.       d (activate-tonality (a maj 1 1 3))
  13.       e (activate-tonality (b& maj 1 1 3))
  14.       f (activate-tonality (f maj 1 1 3))
  15.       g (activate-tonality (g min 1 1 3))
  16.       h (activate-tonality (c maj 7 1 4))
  17.       i (activate-tonality (e maj 7 3 4))
  18.       j (activate-tonality (g maj 1 5 3))
  19.       k (activate-tonality (g maj 7 1 4))
  20.  )
  21.  
  22. (setq ax  '(= = c d f c d f)
  23.    bx (append '(= =) (symbol-shuffle '(c d f c d f)))
  24.    cx (append  '(= =) (symbol-shuffle '(c d f c d f)))
  25.    dx (append '(= =) (symbol-shuffle '(c d f c d f)))
  26.    ex ax
  27.    fx bx
  28.    gx (symbol-scale '(c g) cx)
  29.    hx (symbol-mix dx gx)
  30.    ix ax
  31.    jx (find-change bx)
  32.    kx (find-change cx)
  33. )
  34.  
  35. (def-symbol
  36.    pn1 (eval-section 
  37.        '(a b c d e f g h f g i d b j k a) 'x 'append)
  38.    pn2 '(= b)
  39.    pn3 '(e)
  40. )
  41.   
  42. The structure-pattern of the tonality sequence is the symbol-list above. eval-selection merges the affix-symbol x with each letter of the list. This list now replicates the symbol variables; it is evaluated and the how either lists or appends the output of each variable.
  43.  
  44. (def-length
  45.    pn1 '(1/16)
  46.    pn2 '(1/16 7/16)
  47.    pn3 '(8/16)
  48. )
  49.  
  50. (def-velocity
  51.    default '(96 86 76 64 84 64 72 54)
  52. )
  53.  
  54. (def-zone
  55.   default (symbol-repeat 16 '(2/4))
  56. )
  57.  
  58. (def-tonality
  59.   default (eval-list '(a b c d e f g h f g i d b j k a))
  60. )
  61.  
  62. (compile-instrument "ccl;output:" "prelude"
  63.   pn1
  64.   pn2
  65.   pn3
  66. )
  67.  
  68. With this function you could associate symbol, length, tonality and velocity with the same symbol structure. This means that you could use the output of a generator to devise a composition's structure:
  69.  
  70. (setq form (vector-to-symbol a e (gen-noise-white 20)))
  71.  
  72. (setq am '(a = g = d f)
  73.       ab '(b c d = f g)
  74.       ac '(c d = e f =)
  75.       ad '(f f g g = a)
  76.       ae '(b a f = g b)
  77. )
  78.  
  79. (setq melody 
  80.    (eval-section form 'm 'append))
  81.  
  82. (setq ar '(1/4 1/8 1/8 1/8 1/16 1/16)
  83.       br '(1/8 1/8 1/8 1/16 1/16 1/8)
  84.       cr '(1/8 1/4 1/8 1/8 1/4 1/8)
  85.       dr '(1/8 1/8 1/8 1/8 1/4 1/8)
  86.       er '(1/16 1/16 1/8 1/8 1/8 1/4)
  87. )
  88.  
  89. (setq rhythm 
  90.       (eval-section form 'r 'append))
  91.  
  92. . . and so on
  93.